AWS Elemental LinkでAWS Media Servicesを使ったライブ配信をしてみた!
はじめに
清水です。先日我が家に届きましたAWS Elemental Linkを使って、実際に他のAWS Media Servicesと連携させライブ配信を行ってみました。
AWS Elemental LinkはAWS Elemental MediaLive用のセットアップ済みライブエンコーダデバイスとして動作します。AWS Elemental Linkからのライブオリジンへの連携は、AWS Media ServicesならAWS Elemental MediaStoreまたはAWS Elemental MediaPackageが利用可能です。今回はAWS Elemental MediaPackageをライブオリジンとしました。AWSマネジメントコンソールからリソースを作成し、その過程でライブ配信時に使用するAmazon CloudFrontについてもリソースを作成します。
AWS Media ServicesではHLSなど配信形式のエンドポイントが提供され、ここにAmazon CloudFrontを経由してアクセスします。実際のライブ動画配信の視聴には配信形式に対応した動画プレイヤーが必要になります。今回はJavaScript製の動画プレイヤーのVideo.jsをVideoJS HTTP Streamingのページで使用し、ライブ配信の再生を確認しました。
以下、AWSマネジメントコンソールの画面も交えてまとめていますが、すでにAWS Media Servicesを使ってライブ配信環境を構築したことがあれば、MediaLiveリソースを作成する際に (1) Input typeでElemental Linkを選択する、(2) Channel classではSingle Pipelineを選択する、 という2点を抑えておけば、これまでと同様の手順でライブ配信が可能かと思います。
事前準備
まずは事前準備として、AWS Elemental Linkデバイスを稼働させ、その状態を確認しておきます。
AWS Elemental Linkデバイスの準備
あらかじめAWS Elemental Linkデバイスに映像信号を入力、また有線LANケーブルと電源を接続して稼働状態にしておきます。映像信号は開封したときの稼動確認から引き続き、所有しているコンパクトデジタルカメラOLYMPUS STYLUS SH-3のHDMI出力を使用しました。
この状態でLinkデバイスのフロント部分を確認すると、POWER
、ONLINE
、AWS LINK
がそれぞれ青色に点灯し、またSTREAMING
が紫色に点灯して有効な映像信号がAWS側にストリーミング可能な状態であることが確認できます。
AWS Elemental LinkのデバイスがAWSと連携していることの確認
Linkデバイスの稼働状態をAWSマネジメントコンソールからも確認しておきます。Linkデバイスが紐づいているAWSアカウントで、同じくLinkデバイスの紐づいているMediaLiveのマネジメントコンソール画面を開きます。左側メニューDevices
の項目から該当のLinkデバイスについて、ストリーミングされる映像のサムネイル静止画が表示されていること、Connection stateがConnected
、Device stateがIdle
となっていることを確認します。Linkデバイスが複数台ある場合はデバイスIDから該当のLinkデバイスを判断しましょう。
またデバイスID部分の文字列をクリックすることで詳細画面に遷移することもできます。
ライブ配信環境の構築
続いて、AWS上で各サービスのリソースを作成、ライブ配信環境を構築していきます。リソースはLinkデバイスをOrderした際に指定したリージョンに作成していきます。今回は オレゴンリージョン(us-west-2) となります。また前提として、Administratorアクセス権限を持つIAMユーザ/IAMロールでの作業となります。
AWS Elemental MediaPackageリソース作成
まずはMediaPackageのリソースから作成しておきます。具体的にはMediaPackageのChannelを作成、この際にAmazon CloudFrontディストリビューションもあわせて作成を行います。続いてMediaPackageのEndpointを作成する、という手順となります。
MediaPackageのChannelとCloudFrontディストリビューションの作成
MediaPackageのマネジメントコンソール画面、[Create a new channel]ボタンから進みます。
landingページが表示されない場合は左側メニュー部分のLive > Channelsから、[Create]ボタンで進みます。
Create channel画面、Channel detailsの項目でIDと必要に応じてDescriptionを入力します。Input typeについてはApple HLS
のまま進めます。またCloudFront distribution detailsの項目ではCreate a CloudFront distribution for this channel
を選択します。これでChannel作成にあわせてCloudFrontディストリビューションも作成されます。[Create]ボタンをで作成しましょう。
Channelが作成できました。ページを下にスクロールすると、CloudFrontディストーションの情報についても確認できます。Channel作成直後はStatusがIn progress
ですが、5分ほどでDeployed
になり設定反映が完了した状態となります。
こちらがDeployed
に変わったあとです。
MediaPackageのEndpointの作成
続いてMediaPackageのEndpointを作成します。Channel詳細ページのEndpointsの項目、[Add endpoints]ボタンから進みます。
Add/edit endpointsの画面、New endpointの項目でIDと必要に応じてDescriptionを入力します。またPackager settingsの項目ではApple HLS
となっていることを確認します。本エントリでは扱いませんが、ここで候補に現れるDASH-ISO
、Common Media Application Format (CMAF)
などを選択することで、mpeg-DASHやCMAFでのライブ配信も可能です。
その他の項目はデフォルトのままで、画面左上、Endpointsが表示されている箇所の[Save]ボタんでEndpoint情報を保存します。
保存後、以下のようにEndpoints項目で作成したEndpointが確認できます。またCloudFront distributionの項目ではEndpoint作成(保存)した直後からIn progress
の状態になっていることが確認できます。Endpointに適した設定をCloudFront distribution側に反映中ですので、これも5分程度、Deployed
になるまで待ちましょう。(続くMediaLiveリソースの作成に進んでかまいません。)
AWS Elemental MediaLiveリソースの作成
MediaLiveのInputの作成
続いてMediaLiveのリソースの作成です。マネジメントコンソールのMediaLiveのページ、左側のメニューからInputsへ進み、[Create Input]ボタンで進みます。
Create input画面、Input detailsの項目でInput nameを入力します。またInput typeではElemental Link
を選択します。Input deviceの項目が現れますので、デバイスIDを元に該当するデバイスを選択します。そして[Create]でInputの作成となります。
Inputが作成できました!Inputの詳細ページにも、Linkデバイスからのサムネイル画像が表示されています。
MediaLiveのChannelの作成
続いてMediaLiveのChannelリソースを作成します。MediaLiveのマネジメントコンソール、左側のメニューからChannelsページに移動、[Create channel]ボタンで進みます。
Create channel画面、Channel and input detailsのGeneral infoの項目でChannel nameを入力、またIAMロールを指定します。IAMロールが存在しない場合は、後述の手順で作成しましょう。
Channel templateの項目では、選択できるTemplateのうち、Live event
のMediaPackage
を選択します。
以下のように確認のダイアログが現れますが、[Confirm]で進めます。
Channel classについて、デフォルトではSTANDARD
が選択されていますが、SINGLE_PIPELINE
を選択します。これはMediaLiveのユーザガイド、Working with AWS Elemental Link devicesの項目を確認したところ、Linkデバイスはシングルパイプラインで動作するとのことでした。またInput specificationsについてはデフォルトのまま進めます。こちらもMediaLiveのユーザガイド、Input specifications settingsの項目を確認する限り、Linkデバイスのみを使用の場合にはInput specificationsの項目はデフォルトでよいとのことでした。
この後、[Create channel]は まだ押さずに、左側の項目のInput attachmentsの[Add]ボタンから、先ほど作成したMediaLiveのInputとの紐付けを行います。
Attach inputの画面に遷移します。Choose an inputから先ほど作成したInputを選択しましょう。
選択後、以下のようにLinkデバイスのIDも確認できます。Attachment nameは必要に応じて変更しておきましょう。 確認後、[Confirm]ボタンを押します。 この[Confirm]ボタンを押すまで(Inputを選択しただけでは)、Input attachmentsは設定されませんので注意しましょう。
Attach inputの[Confirm]ボタン押下後、以下のようにInputがアタッチされている(左側、Input attachmentsの項目にInputが追加されている)ことを確認します。続いて出力の設定を行いますので、Ouptput groupsの1. HD (MediaPackage)
の部分(リンクになっています)をクリックします。
Output groupsの設定画面になります。MediaPackage destinationの項目で、先ほどMediaPackageで作成したChannelのIDを入力します。Outputの詳細については、選択したTemplateで設定されているので、そのまま[Create channel]でChannelを作成します。
MediaPackageのChannel IDについては、MediaPackageマネジメントコンソールで確認することができます。
MediaLive用のIAMロールが存在しない場合
MediaLiveのChannel作成時に、MediaLive用のIAMロールがそのAWSアカウントに存在しない(まだ作成していない)場合は、以下のようにGeneral InfoのIAM roleの項目でCreate role from template
がデフォルトで選択され、[Create IAM role]ボタンが表示されます。内容を確認して[Create IAM role]でIAMロールを作成しましょう。
MediaLiveAccessRole
というIAMロールが作成されます。このIAMロールをUse existing role
で選択して設定を進めましょう。いちどこのIAMロールを作成しておけば、以降のMediaLiveのChannel作成時にも使用することができます。
ライブ配信の開始
AWS側のリソースが準備できたら、実際にライブ配信を開始してみます。
あらかじめ、LinkデバイスがAWS側と接続され、サムネイル静止画が更新されていることを確認しておきましょう。
AWS Elemental MediaLiveのStart
MediaLiveのChannelをStartさせます。MediaLiveのChannleは作成直後はステータスがIdle
の状態です。これをStart
させることで、Running
状態に遷移し、実際にライブ配信が開始されます。なおMediaLiveの料金についても、このRunning
状態に発生する点に注意しましょう。(Linkデバイス側で映像の打ち上げを終了しても、MediaLiveのChannelがRunning
状態であれば料金が発生し続けます。またInput/ChannelでそれぞれIdle状態でもわずかに費用が発生します。)
作成直後は以下のようなIdle
状態ですので、[Start]ボタンでストリーミングを開始します。
[Start]ボタンを押した直後はStarting
のステータスになります。
ステータスがRunning
になれば、MediaPackageへのストリーミングが開始されています。
ライブ配信動画の視聴
ライブストリーミングが開始されたら、実際にライブ配信している映像を確認してみます。MediaPackageではHLS(などストリーミング形式)のEndpointが提供されます。ChannelのEndpointsの項目でEndpoint名をクリックして、Endpointの詳細画面に進みましょう。
Endpiontの詳細画面で、CloudFront URLをコピーします。macOSやiOSのSafariなど、HLS再生にネイティブ対応しているブラウザであればこのURLを開くだけで動画の再生がはじまります。Chromeブラウザなどの場合は、Video.jsなどJavaScript製の動画プレイヤーを使用することになります。今回はVideoJS HTTP Streamingのページにて再生確認を行いました。
VideoJS HTTP Streamingのページを開いたら、Video URL:
欄に先ほどのCloudFront URLを入力します。(初期状態でもサンプル動画のURLが入力されています。これもCloudFrontドメインのものなのですが、こちらは削除しましょう。)またMimeType:
がapplication/x-mpegURL
となっていることを確認します。
[Load]ボタンを押すと、プレイヤー部分に再生マークが現れますので、そのままプレイヤー部分をクリックすると、ライブ配信の再生がはじまります!
映像にはコンパクトデジタルカメラOLYMPUS STYLUS SH-3のHDMI出力を使用していましたが、リアルタイムの映像プレビューでは音声が入らないことが確認でき、OLYMPUS STYLUS SH-3で撮影した動画を再生する映像をLinkデバイスから打ち上げることにしました。後方では確認のため、MacBook Pro上でBig Buck Bunnyの動画を音付きで流しています。画面下部の白文字の時間表記とシークバーはこのOLYMPUS STYLUS SH-3側で出力されている(Linkデバイスに映像入力する段階で付与されている)ものです。
ライブ配信中のAWS Elemental Linkの状態
ライブ配信中、つまりMediaLiveのステータスがRunningになりストリーミングが開始されている状態のLinkデバイスを確認しておきましょう。前面のLEDについてはSTREAMING
が青色の点灯になっています。(MediaLiveをStartさせていない状態では紫色の点灯でした。)
またデバイス詳細画面では、以下のようにDevice stateがStreaming
の状態になっています。(MediaLiveのStart前はIdle
でした。)
ライブ配信後の後片付け
ライブ配信が終わったら、AWSサービスの後片付けをしておきましょう。まずMediaLiveのChannel、Running
状態にしていましたがこの状態で入出力に応じた料金が発生します。[Stop]ボタンを押してIdel
状態にしましょう。(Linkデバイスからの映像打ち上げを終えてもRunning
のまま放置してしまうとMediaLive側での料金が発生し続けます。)
またMediaLiveのInput、ChannelについてはIdle状態でも料金が発生します。長期間使用する予定がないなどの場合はいちどInput、Channelリソースを削除しておきましょう。削除は作成時とは逆順、Channelから先に行う必要があります。
まとめ
AWS Elemental LinkとAWS Elemental MediaLive、そしてAWS Elemental MediaPackageとAmazon CloudFrontを連携させてライブ配信を行ってみました。AWS Elemental LinkのデバイスはAWS Elemental MediaLiveのInputに割り当てられます。またAWS Elemental MediaLiveはSingle Pipelineでの動作となります。例えばRTMP pushなど他のInput typeの場合と異なるのはこの点のみで、その他の項目はAWS Elemental Linkを使わない場合のライブ配信の構成と同様に実現できるかと思います。